lvm2: install: fix "Argument list too long" error when copying symlinks
authorPetr Štetiar <[email protected]>
Wed, 21 May 2025 18:48:30 +0000 (18:48 +0000)
committerDaniel Golle <[email protected]>
Mon, 20 Oct 2025 19:53:11 +0000 (20:53 +0100)
It was reported that in some build environments the install step fails
with following:

 find /home/.../buildsystem/build_dir/target-aarch64-unknown-linux-gnu_musl/lvm2-normal/LVM2.2.03.22/ipkg-install/usr/sbin/ -type l -exec cp -fpR -a {} /home/.../buildsystem/build_dir/target-aarch64-unknown-linux-gnu_musl/lvm2-normal/LVM2.2.03.22/.pkgdir/lvm2/sbin/ \;
 make[6]: /bin/sh: Argument list too long

This is likely happening once the number of symlinks exceeds the shell's
maximum argument limit.

So lets fix it by switching to more reliable xargs based solution:

 print0/xargs -0 to handle filenames with special characters
 xargs -r to skip execution if no files are found
 cp -t to specify the target directory once instead of for each file

Fixes: #26552
Signed-off-by: Petr Štetiar <[email protected]>
utils/lvm2/Makefile

index ef62eb5676b41cf80e986f6773451b71f5b197df..7f6bdbf15c3f0f8abed3659f3fc8bb7efec3aad2 100644 (file)
@@ -153,7 +153,7 @@ define Package/lvm2/install
        $(INSTALL_BIN) ./files/lvm2.init $(1)/etc/init.d/lvm2
        $(INSTALL_DIR) $(1)/etc/hotplug.d/block
        $(INSTALL_DATA) ./files/lvm2.hotplug $(1)/etc/hotplug.d/block/20-lvm2
-       $(FIND) $(PKG_INSTALL_DIR)/usr/sbin/ -type l -exec $(CP) -a {} $(1)/sbin/ \;
+       $(FIND) $(PKG_INSTALL_DIR)/usr/sbin/ -type l -print0 | xargs -0 -r $(CP) -a -t $(1)/sbin/
 endef
 
 Package/lvm2-selinux/install = $(Package/lvm2/install)